﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using BGCOP.CAVTOP.INNERDEFS;

namespace BGCOP.CAVTOP.UTCOM.WINFORMS
{
	public partial class Form3 : Form
	{
		private bool lActivo = false;
		private int estadoM1 = 1;
		int[] VetorInners = new int[32];
		DateTime t1 = DateTime.Now;
		DateTime t2 = DateTime.Now;
		DateTime t4 = DateTime.Now;
		DateTime t5 = DateTime.Now;
		TimeSpan t3 = new TimeSpan();
		byte Origem = 0;
		byte Complemento = 0;
		StringBuilder Cartao = new StringBuilder();
		byte Dia = 0;
		byte Mes = 0;
		byte Ano = 0;
		byte Hora = 0;
		byte Minuto = 0;
		byte Segundo = 0;
		string strCartao = string.Empty;
		private int numFallas = 0;
		int InnerAtual = 1;

		public Form3()
		{
			InitializeComponent();
		}

		public void llenaTXT(string cadena)
		{
			textBox1.AppendText("[" + DateTime.Now + "] " + cadena + "\n");
			textBox1.ScrollToCaret();
		}

		private void button1_Click(object sender, EventArgs e)
		{
			//varias

			t1 = DateTime.Now;
			t2 = DateTime.Now;
			//*********************************************************************
			int res = -1;
			//Variable to store the current status of each Inner, let’s suppose that the vector has already been initialized using value 1 for each index.
			
			//Variable that says which Inner we are talking about
			
			Bilhete evento;
			VetorInners[InnerAtual] = 1;
			//Defines what type of communication is to be used (in this case, TCP/IP)
			EasyInner.DefinirTipoConexao((byte)Enumeradores.TipoConexao.TCP_IP_COM_PORTA_FIXA);
			//Close previously opened communication port, only as a precautionary measure
			EasyInner.FecharPortaComunicacao();
			//Initializes the TCP/IP communication port, the parameter is ignored in this case
			if (EasyInner.AbrirPortaComunicacao(3570) == (int) Enumeradores.Retorno.RET_COMANDO_OK)
			{
				while (!lActivo)
				{
					switch (VetorInners[InnerAtual])
					{
						case 1:
							//verifica si esxiste conexion con el inner
							res = EasyInner.Ping(InnerAtual);
							if (res == (int) Enumeradores.Retorno.RET_COMANDO_OK)
							{
								llenaTXT("Inner: " + InnerAtual.ToString() + " en linea");
								VetorInners[InnerAtual] = 2;
							}
							else
							{
								llenaTXT("Inner: " + InnerAtual.ToString() + " Fuera de linea!");
							}
							break;
						case 2:
							 //llenaTXT("Inner: " + InnerAtual.ToString() + " Conf Offline OK");
								VetorInners[InnerAtual] = 3;
							//break;
							EasyInner.ConfigurarInnerOffLine();
							EasyInner.DefinirQuantidadeDigitosCartao(14);
							//EasyInner.HabilitarTeclado(1, 0);
					        
							EasyInner.ConfigurarTipoLeitor((byte)Enumeradores.TipoLeitor.PROXIMIDADE_ABATRACK2);
							EasyInner.ConfigurarLeitor1((byte)Enumeradores.Operacao.ENTRADA_E_SAIDA );
							EasyInner.ConfigurarLeitor2((byte)Enumeradores.Operacao.DESATIVADO );
                            EasyInner.DefinirFuncaoDefaultLeitoresProximidade(12);
                             //###################################################################################
                    //          Início do envio da lista de acessos OffLine
                    //###################################################################################
                    //-----------------------------------------------------------------------------------
                    //Para que a lista de acessos funcione, é necessária a utilização dos
                    //horários de acesso. Abaixo um exemplo de montagem da tabela de horários:
                    res = EasyInner.ApagarHorariosAcesso((byte)1);
                    for (int d = 1; d < 6; d++)//laço para preencher os 5 dias,1 a 5 (segunda a sexta)
                    {
                        //                                   Horario1,DIA    ,Faixa 1 , Horário  
                        res = EasyInner.InserirHorarioAcesso((byte)1, (byte)d, (byte)1, (byte)5, 0);
                        //                                   Horario1,DIA    ,Faixa 1 , Horário  
                        res = EasyInner.InserirHorarioAcesso((byte)1, (byte)d, (byte)(2), (byte)20, 0);
                    }
                    //envia a tabela de horários
                    res = EasyInner.EnviarHorariosAcesso((byte)InnerAtual);
                    //Início do envio da lista de horários 
                    EasyInner.ApagarListaAcesso((byte)InnerAtual);
                    //                                   Cartão       , Horário 1
                    EasyInner.InserirUsuarioListaAcesso("64692351783", (byte)1);
                    //                                   Cartão       , Horário 1
                    EasyInner.InserirUsuarioListaAcesso("64692351784", (byte)1);
                    //                                   Cartão       , Horário 1
                    EasyInner.InserirUsuarioListaAcesso("64692351785", (byte)1);
                    //                                   Cartão      , Horário 100 acesso sempre negado
                    EasyInner.InserirUsuarioListaAcesso("111111111111", (byte)100);
                    //                                   Cartão      , Horário 100 acesso sempre negado
                    EasyInner.InserirUsuarioListaAcesso("222222222222", (byte)101);

                    res = EasyInner.EnviarListaAcesso((byte)InnerAtual);
							res = EasyInner.EnviarConfiguracoes(InnerAtual);
							if (res == (int)Enumeradores.Retorno.RET_COMANDO_OK)
							{
								llenaTXT("Inner: " + InnerAtual.ToString() + " Conf Offline OK");
								VetorInners[InnerAtual] = 3;
							}
							else
							{
								llenaTXT("Inner: " + InnerAtual.ToString() + " Conf Offline FAIL!");
							}
							break;
						case 3:
							llenaTXT("Inner: " + InnerAtual.ToString() + " consulta eventos");
							evento = new Bilhete();
							res = EasyInner.ColetarBilhete(InnerAtual, ref evento.Tipo, ref evento.Dia, ref evento.Mes, ref evento.Ano,
														   ref evento.Hora, ref evento.Minuto, evento.Cartao);
							if (res == (int)Enumeradores.Retorno.RET_COMANDO_OK)
							{
								llenaTXT("Inner: " + InnerAtual.ToString() + " evento : " + evento.Cartao.ToString());
								
							}
							else
							{
								llenaTXT("Inner: " + InnerAtual.ToString() + " fin de los eventos");
								VetorInners[InnerAtual] = 4;
							}
							break;
						case 4:
							EasyInner.HabilitarMudancaOnLineOffLine((byte)Enumeradores.MudancaOnlineOffline.SEM_PING_ONLINE, 10);
							EasyInner.DefinirEntradasMudancaOffLine((byte)Enumeradores.Opcao.SIM,//Teclado
																		(byte)Enumeradores.Opcao.SIM,//Leitor1
																		0,//Leitor2
																		0//Verificação
																		);//Identificação
                            EasyInner.DefinirFuncaoDefaultLeitoresProximidade(12);
							EasyInner.DefinirMensagemPadraoMudancaOffLine((byte)Enumeradores.Opcao.SIM, "In Modo Offline");
							EasyInner.DefinirMensagemPadraoMudancaOnLine((byte)Enumeradores.Opcao.SIM, "In Modo Online");
							EasyInner.DefinirEntradasMudancaOnLine(5);
							//EasyInner.DefinirConfiguracaoTecladoOnLine( )
							res = EasyInner.EnviarConfiguracoesMudancaAutomaticaOnLineOffLine(InnerAtual);
							if (res == (int)Enumeradores.Retorno.RET_COMANDO_OK)
							{
								llenaTXT("Inner: " + InnerAtual.ToString() + " atoma off on OK");
								VetorInners[InnerAtual] = 5;
							}
							else
							{
								llenaTXT("Inner: " + InnerAtual.ToString() + " atoma off on FAIL!");
								
							}
							break;
						case 5:
							EasyInner.ConfigurarInnerOnLine();
							EasyInner.DefinirQuantidadeDigitosCartao(14);
							EasyInner.HabilitarTeclado(1, 0);
							EasyInner.ConfigurarTipoLeitor((byte)Enumeradores.TipoLeitor.PROXIMIDADE_ABATRACK2);
							EasyInner.ReceberDataHoraDadosOnLine(1);
							res = EasyInner.EnviarConfiguracoes(InnerAtual);
							if (res == (int)Enumeradores.Retorno.RET_COMANDO_OK)
							{
								llenaTXT("Inner: " + InnerAtual.ToString() + " conf Online OK");
								VetorInners[InnerAtual] = 6;
							}
							else
							{
								llenaTXT("Inner: " + InnerAtual.ToString() + " conf Online FAIL");

							}
							break;
						case 6:
							res = EasyInner.EnviarMensagemPadraoOnLine(InnerAtual, 1, "In onLine Mode");
							if (res == (int)Enumeradores.Retorno.RET_COMANDO_OK)
							{
								llenaTXT("Inner: " + InnerAtual.ToString() + " msg online OK");
								VetorInners[InnerAtual] = 7;
							}
							else
							{
								llenaTXT("Inner: " + InnerAtual.ToString() + " msg online FAIL");

							}
							break;
						case 7:
							res = EasyInner.EnviarFormasEntradasOnLine(
							InnerAtual,      //Numero do Inner..
							(byte)14,  //Qtd Digitos Teclado..
							1,                      //Eco do Teclado no Display..
							(byte)Enumeradores.EntradasMudancaOnline.ACEITA_LEITURA_LEITOR2 ,  //TECLADO_E_LEITOR1_E_VERI_BIOMETRICA,//Teclado + Leitor 1 + Verificação Biométrica..
							15,                     //Tempo teclado..
							17);                    //Posição do Cursor no Teclado..
							if (res == (int)Enumeradores.Retorno.RET_COMANDO_OK)
							{
								llenaTXT("Inner: " + InnerAtual.ToString() + " entrada online OK");
								VetorInners[InnerAtual] = 8;
							}
							else
							{
								llenaTXT("Inner: " + InnerAtual.ToString() + " entrada online FAIL");

							}
							break;
						case 8:
							t2 = DateTime.Now;
							res = EasyInner.ReceberDadosOnLine(InnerAtual,ref Origem, ref Complemento, 
								Cartao, ref Dia, ref Mes, ref Ano, ref Hora,ref Minuto, ref Segundo);
							if (res == (int)Enumeradores.Retorno.RET_COMANDO_OK)
							{
								strCartao = "";

								for (var Count = 0; Count < Cartao.Length; Count++)
								{
									strCartao += System.Convert.ToString(System.Convert.ToChar(Cartao[Count]));
								}

								llenaTXT("Coleta Online. Inner: " +
										 InnerAtual.ToString() + " " +
										 "Origem: " + Origem.ToString() + " " +
										 "Complemento: " + Complemento.ToString() +
										 " Cartão: " + strCartao + " Data: " +
										 Dia.ToString() + "/" +
										 Mes.ToString() + "/" +
										 Ano.ToString() + " " +
										 Hora.ToString() + ":" +
										 Minuto.ToString() + ":" +
										 Segundo.ToString());
								VetorInners[InnerAtual] = 7;
							}
							else
							{
								t3 = t2 - t1;
								if (t3.Seconds > 3)
								{
									t1 = t2;
									res = EasyInner.PingOnLine(InnerAtual);
									if (res == (int) Enumeradores.Retorno.RET_COMANDO_OK)
									{
										VetorInners[InnerAtual] = 6;
									}
									else
									{
										VetorInners[InnerAtual] = 1;
									}
								}
							}
							break;
					}
					Application.DoEvents();
					System.Threading.Thread.Sleep(200);
				}
				llenaTXT("Inner: " + InnerAtual.ToString() + " proceso completado!");
				EasyInner.FecharPortaComunicacao();
				//*********************************************************************
			}
		}
		private void button2_Click(object sender, EventArgs e)
		{
			lActivo = true;
		}

		private void Form3_Load(object sender, EventArgs e)
		{

		}

		private void tmrInner1_Tick(object sender, EventArgs e)
        {
            
            //Declaração de Variáveis..
            tmrInner1.Enabled = false;
            int qtyB = 14;
            
            int res;
            Bilhete evento;

            switch (VetorInners[InnerAtual])
            {
                case 1:
                    //verifica si esxiste conexion con el inner
                    numFallas = 0;
                    tmrInner1.Interval = 800;
                    res = EasyInner.Ping(InnerAtual);
                    if (res == (int)Enumeradores.Retorno.RET_COMANDO_OK)
                    {
                        
                        if (EasyInner.AcionarBipCurto(InnerAtual) == (int)Enumeradores.Retorno.RET_COMANDO_OK)
                        {
                            System.Threading.Thread.Sleep(500);
                            if (EasyInner.AcionarBipLongo(InnerAtual) == (int)Enumeradores.Retorno.RET_COMANDO_OK)
                            {
                                System.Threading.Thread.Sleep(950);
                                if (EasyInner.AcionarBipCurto(InnerAtual) == (int)Enumeradores.Retorno.RET_COMANDO_OK)
                                {

                                }//00064692351783
                            }
                            
                            llenaTXT("Inner: " + InnerAtual.ToString() + " en linea");
                        }
                        System.Threading.Thread.Sleep(500);
                        VetorInners[InnerAtual] = 2;
                    }
                    else
                    {
                        llenaTXT("Inner: " + InnerAtual.ToString() + " Fuera de linea!");
                    }
                    break;
                case 2:
                    tmrInner1.Interval = 60;
                    //llenaTXT("Inner: " + InnerAtual.ToString() + " Conf Offline OK");
                    //VetorInners[InnerAtual] = 3;
                    //break;
                    
                // no tengo claro como hacer la configuracion offline
                    //como se debe ingresar una lista?
                    //para este ejemplo deben ingresarse las siguientes tarjetas en listas  de acceso: 00064692351783, 00064692351784, 00064692351785
                    //para este ejemplo debe ingresarse un horario de lunes-viernes 5:00 am --  20:00 pm
                    //deben cambiarse los mensajes del inner

                    EasyInner.ConfigurarInnerOffLine();
                    EasyInner.DefinirQuantidadeDigitosCartao((byte)qtyB);
                    EasyInner.DefinirMensagemEntradaOffLine((byte) 1, "Entrada OK");
                    EasyInner.DefinirMensagemSaidaOffLine( (byte)1, "Saida OK");
                    EasyInner.DefinirMensagemPadraoOffLine( 1, "Off Line");
                    EasyInner.EnviarMensagensOffLine(InnerAtual);
                    EasyInner.ConfigurarTipoLeitor(2);
                    EasyInner.ReceberDataHoraDadosOnLine(1);
                    EasyInner.ConfigurarLeitor1((byte)Enumeradores.Operacao.ENTRADA_E_SAIDA);
                    EasyInner.ConfigurarLeitor2((byte)Enumeradores.Operacao.ENTRADA_E_SAIDA);
                    EasyInner.ConfigurarAcionamento1((byte)Enumeradores.FuncaoAcionamento.ACIONA_REGISTRO_ENTRADA_OU_SAIDA, 7);
                    //Utilizar ConfigurarAcionamento2 somente para Urna coletora de cartões
                //    EasyInner.ConfigurarAcionamento2((byte)Enumeradores.FuncaoAcionamento.ACIONA_REGISTRO_ENTRADA_OU_SAIDA, 7);    
                    
                    
                    //EasyInner.DefinirFuncaoDefaultLeitoresProximidade(12);

                    //###################################################################################
                    //          Início do envio da lista de acessos OffLine
                    //###################################################################################
                    //-----------------------------------------------------------------------------------
                    //Para que a lista de acessos funcione, é necessária a utilização dos
                    //horários de acesso. Abaixo um exemplo de montagem da tabela de horários:
                    res = EasyInner.ApagarHorariosAcesso((byte)1);
                    
                    for (int d = 1; d < 6; d++)//laço para preencher os 5 dias,1 a 5 (segunda a sexta)
                    {
                        //                                   Horario1,DIA    ,Faixa 1 , Horário  
                        res = EasyInner.InserirHorarioAcesso((byte)1, (byte)d, (byte)1, (byte)5, 0);
                        //                                   Horario1,DIA    ,Faixa 1 , Horário  
                        res = EasyInner.InserirHorarioAcesso((byte)1, (byte)d, (byte)(2), (byte)20, 0);
                    }
                    //envia a tabela de horários
                    res = EasyInner.EnviarHorariosAcesso((byte)InnerAtual);
                    //Início do envio da lista de horários 
                    EasyInner.ApagarListaAcesso((byte)InnerAtual);
                    //                                   Cartão       , Horário 1
                    EasyInner.InserirUsuarioListaAcesso("64692351783", (byte)1);
                    //                                   Cartão       , Horário 1
                    EasyInner.InserirUsuarioListaAcesso("64692351784", (byte)1);
                    //                                   Cartão       , Horário 1
                    EasyInner.InserirUsuarioListaAcesso("64692351785", (byte)1);
                    //                                   Cartão      , Horário 100 acesso sempre negado
                    EasyInner.InserirUsuarioListaAcesso("111111111111", (byte)100);
                    //                                   Cartão      , Horário 100 acesso sempre negado
                    EasyInner.InserirUsuarioListaAcesso("222222222222", (byte)101);

                    res = EasyInner.EnviarListaAcesso((byte)InnerAtual);
                    res = EasyInner.EnviarConfiguracoes((byte)InnerAtual);
                    if (res == (int)Enumeradores.Retorno.RET_COMANDO_OK)
                    {
                        llenaTXT("Inner: " + InnerAtual.ToString() + " Conf Offline OK");
                        VetorInners[InnerAtual] = 3;
                    }
                    else
                    {
                        llenaTXT("Inner: " + InnerAtual.ToString() + " Conf Offline FAIL!");
                        numFallas++;
                    }
                    break;
                case 3:
                    llenaTXT("Inner: " + InnerAtual.ToString() + " consulta eventos");
                    evento = new Bilhete();

                    evento.Ano = 0;
                    evento.Cartao = null;
                    evento.Cartao = new StringBuilder();
                    evento.Dia = 0;
                    evento.Hora = 0;
                    evento.Mes = 0;
                    evento.Minuto = 0;
                    evento.Tipo = 0;
                    res = EasyInner.ColetarBilhete(InnerAtual, ref evento.Tipo, ref evento.Dia, ref evento.Mes, ref evento.Ano,
                                                   ref evento.Hora, ref evento.Minuto, evento.Cartao);
                    if (res == (int)Enumeradores.Retorno.RET_COMANDO_OK)
                    {
                        llenaTXT("Inner: " + InnerAtual.ToString() + " evento : " + evento.Cartao.ToString());

                    }
                    else
                    {
                        llenaTXT("Inner: " + InnerAtual.ToString() + " fin de los eventos");
                        VetorInners[InnerAtual] = 4;
                    }
                    break;
                case 4:
                    EasyInner.HabilitarMudancaOnLineOffLine((byte)Enumeradores.MudancaOnlineOffline.SEM_PING_ONLINE, 10);
                    EasyInner.DefinirEntradasMudancaOffLine((byte)Enumeradores.Opcao.SIM,//Teclado
                                                                (byte)Enumeradores.Opcao.SIM,//Leitor1
                                                                (byte)Enumeradores.Opcao.NAO,//Leitor2
                                                                (byte)Enumeradores.Opcao.SIM//Verificação
                                                                );//Identificação
                    EasyInner.DefinirFuncaoDefaultLeitoresProximidade(12);
                    EasyInner.DefinirMensagemPadraoMudancaOffLine((byte)Enumeradores.Opcao.SIM, "In Modo Offline");
                    EasyInner.DefinirMensagemPadraoMudancaOnLine((byte)Enumeradores.Opcao.SIM, "In Modo Online");
                    EasyInner.DefinirEntradasMudancaOnLine(5);
                    //EasyInner.DefinirConfiguracaoTecladoOnLine( )
                    res = EasyInner.EnviarConfiguracoesMudancaAutomaticaOnLineOffLine(InnerAtual);
                    if (res == (int)Enumeradores.Retorno.RET_COMANDO_OK)
                    {
                        llenaTXT("Inner: " + InnerAtual.ToString() + " atoma off on OK");
                        VetorInners[InnerAtual] = 5;
                    }
                    else
                    {
                        llenaTXT("Inner: " + InnerAtual.ToString() + " atoma off on FAIL!");

                    }
                    break;
                case 5:
                    EasyInner.ConfigurarInnerOnLine();
                    EasyInner.DefinirQuantidadeDigitosCartao(14);
                    EasyInner.HabilitarTeclado(1, 0);
                    EasyInner.ConfigurarTipoLeitor((byte)Enumeradores.TipoLeitor.PROXIMIDADE_ABATRACK2);
                    EasyInner.ReceberDataHoraDadosOnLine(1);
                    res = EasyInner.EnviarConfiguracoes(InnerAtual);
                    if (res == (int)Enumeradores.Retorno.RET_COMANDO_OK)
                    {
                        llenaTXT("Inner: " + InnerAtual.ToString() + " conf Online OK");
                        VetorInners[InnerAtual] = 6;
                    }
                    else
                    {
                        llenaTXT("Inner: " + InnerAtual.ToString() + " conf Online FAIL");

                    }
                    break;
                case 6:
                    res = EasyInner.EnviarMensagemPadraoOnLine(InnerAtual, 1, "In onLine Mode");
                    if (res == (int)Enumeradores.Retorno.RET_COMANDO_OK)
                    {
                        llenaTXT("Inner: " + InnerAtual.ToString() + " msg online OK");
                        VetorInners[InnerAtual] = 7;
                    }
                    else
                    {
                        llenaTXT("Inner: " + InnerAtual.ToString() + " msg online FAIL");

                    }
                    break;
                case 7:
                    res = EasyInner.EnviarFormasEntradasOnLine(
                    InnerAtual,      //Numero do Inner..
                    (byte)14,  //Qtd Digitos Teclado..
                    1,                      //Eco do Teclado no Display..
                    (byte)Enumeradores.EntradasMudancaOnline.LEITOR1_E_LEITOR2,  //TECLADO_E_LEITOR1_E_VERI_BIOMETRICA,//Teclado + Leitor 1 + Verificação Biométrica..
                    15,                     //Tempo teclado..
                    17);                    //Posição do Cursor no Teclado..
                    if (res == (int)Enumeradores.Retorno.RET_COMANDO_OK)
                    {
                        llenaTXT("Inner: " + InnerAtual.ToString() + " entrada online OK");
                        VetorInners[InnerAtual] = 8;
                    }
                    else
                    {
                        llenaTXT("Inner: " + InnerAtual.ToString() + " entrada online FAIL");

                    }
                    break;
                case 8:
                    t2 = DateTime.Now;
                    Cartao = new StringBuilder();
                    res = EasyInner.ReceberDadosOnLine(InnerAtual, ref Origem, ref Complemento,
                        Cartao, ref Dia, ref Mes, ref Ano, ref Hora, ref Minuto, ref Segundo);
                    if (res == (int)Enumeradores.Retorno.RET_COMANDO_OK)
                    {
                        
                        strCartao = "";

                        for (var Count = 0; Count < qtyB ; Count++)
                        {
                            strCartao += System.Convert.ToString(System.Convert.ToChar(Cartao[Count]));
                        }

                        llenaTXT("Datos en linea Inner: " +
                                 InnerAtual.ToString() + " " +
                                 "Origem: " + Origem.ToString() + " " +
                                 "Complemento: " + Complemento.ToString() +
                                 " Cartão: " + strCartao + " Data: " +
                                 Dia.ToString() + "/" +
                                 Mes.ToString() + "/" +
                                 Ano.ToString() + " " +
                                 Hora.ToString() + ":" +
                                 Minuto.ToString() + ":" +
                                 Segundo.ToString());
                        if (strCartao.Contains("00064692351783"))
                        {
                            if (EasyInner.AcionarBipCurto(InnerAtual) == (int)Enumeradores.Retorno.RET_COMANDO_OK)
                            {
                                t4 = DateTime.Now;
                                t5 = DateTime.Now;
                                //res = EasyInner.EnviarMensagemPadraoOnLine(InnerAtual, 1, "Por favor Pase");
                                res=EasyInner.EnviarMensagemPadraoOnLine(InnerAtual, (byte)Enumeradores.Opcao.NAO, "Siga por favor");
                                if (res == (int)Enumeradores.Retorno.RET_COMANDO_OK)
                                {
                                    EasyInner.LiberarCatracaDoisSentidos(InnerAtual);
                                    VetorInners[InnerAtual] = 9;
                                    break;
                                }
                                
                                VetorInners[InnerAtual] = 9;
                                break;
                            }
                            //System.Threading.Thread.Sleep(50);


                        }
                        else
                        {
                            res = EasyInner.EnviarMensagemPadraoOnLine(InnerAtual, (byte)Enumeradores.Opcao.NAO, "Permiso Denegado!");
                            if (res == (int)Enumeradores.Retorno.RET_COMANDO_OK)
                            {
                                EasyInner.AcionarBipCurto(InnerAtual);
                                tmrRefMsg.Enabled = true;
                            }
                            
                            
                        }
                        VetorInners[InnerAtual] = 7;
                    }
                    else
                    {
                        t3 = t2 - t1;
                        if (t3.Seconds > 3)
                        {
                            t1 = t2;
                            res = EasyInner.PingOnLine(InnerAtual);
                            if (res == (int)Enumeradores.Retorno.RET_COMANDO_OK)
                            {
                                VetorInners[InnerAtual] = 6;
                            }
                            else
                            {
                                VetorInners[InnerAtual] = 1;
                            }
                        }
                    }
                    break;
                case 9:
                    //verificar  el giro del molinete
                    t5 = DateTime.Now;
                    res = EasyInner.ReceberDadosOnLine(InnerAtual, ref Origem, ref Complemento,
                        Cartao, ref Dia, ref Mes, ref Ano, ref Hora, ref Minuto, ref Segundo);
                    if (res == (int)Enumeradores.Retorno.RET_COMANDO_OK)
                    {
                        if (Origem == (int)Enumeradores.Origem.FIM_TEMPO_ACIONAMENTO)
                        {
                            //UiMainOnline.lblDados.Text = "Não girou a catraca!";
                            llenaTXT("No giro ok");
                            EasyInner.EnviarMensagemPadraoOnLine(InnerAtual, 1, "En Linea");
                            
                            VetorInners[InnerAtual] = 7;
                        }
                        else if (Origem == (int)Enumeradores.Origem.GIRO_DA_CATRACA_TOPDATA)
                        {
                            //UiMainOnline.lblDados.Text = "Girou a catraca!";
                            EasyInner.EnviarMensagemPadraoOnLine(InnerAtual, 1, "En Linea");
                            llenaTXT("giro Ok");
                            VetorInners[InnerAtual] = 7;
                        }
                    }
                    else
                    {
                        t3 = t5 - t4;
                        if (t3.Seconds > 10)
                        {
                            llenaTXT("se vencio el tiempo");
                            EasyInner.EnviarMensagemPadraoOnLine(InnerAtual, 1, "En Linea");
                            VetorInners[InnerAtual] = 7;
                        }
                    }
                    break;
            }
            if (numFallas > 2)
            {
                VetorInners[InnerAtual] = 1;
            }
            tmrInner1.Enabled = true;
        }

		private void button3_Click(object sender, EventArgs e)
		{
			 
			//Variable that says which Inner we are talking about
			int InnerAtual = 1;
			Bilhete evento;
			VetorInners[InnerAtual] = 1;
			//Defines what type of communication is to be used (in this case, TCP/IP)
			EasyInner.DefinirTipoConexao((byte)Enumeradores.TipoConexao.TCP_IP_COM_PORTA_FIXA);
			//Close previously opened communication port, only as a precautionary measure
			EasyInner.FecharPortaComunicacao();
			//Initializes the TCP/IP communication port, the parameter is ignored in this case
			if (EasyInner.AbrirPortaComunicacao(3570) == (int)Enumeradores.Retorno.RET_COMANDO_OK)
			{
				t1 = DateTime.Now;
				t2 = DateTime.Now;
				tmrInner1.Enabled = true;
			}
			else
			{
				llenaTXT("Error de Conexion TCP!");
			}
		}

		private void button4_Click(object sender, EventArgs e)
		{

			
			tmrInner1.Enabled = false;
			
			
			EasyInner.FecharPortaComunicacao();
			MessageBox.Show("Termino!");
		}

		private void tmrRefMsg_Tick(object sender, EventArgs e)
		{
			tmrRefMsg.Enabled = false;
			EasyInner.EnviarMensagemPadraoOnLine(InnerAtual, 1, "En Linea");
		}
	}

	
	
}
